iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Security

Izumi從零開始的30日WEB馬拉松系列 第 28

Day28-建立基本防禦環境

  • 分享至 

  • xImage
  •  

今天是第28天,也是倒數第三天,今天要教大家簡單的幾個為WSL設定基本防禦環境的方法,這樣就可以避免自己的WSL在使用時看起來像在裸奔一樣。

第一項.建立防火牆

我們那天雖然有建立防火牆,但是我們今天要更改成比那天更好的策略,我們今天要採用一種叫預設封鎖的策略,我們會先只允許SSH方便遠端管理以及HTTP/HTTPS提供的網站服務,剩下的會先封鎖,有需要的時候再慢慢放行,這樣做可以有效的減少攻擊面或防止誤開服務,同時,這樣做也符合最小權限原則,明確需要的服務。指令如下:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

最後再用sudo ufw status檢查狀態,確保只有我們允許的埠開著。

https://ithelp.ithome.com.tw/upload/images/20251008/20178008vbPIKsZLqw.png

第二項.防止強攻或暴力破解

我們在這步要安裝fail2ban,使用指令:

sudo apt install fail2ban -y

接著使用指令sudo fail2ban-client status進行檢查是否運作
https://ithelp.ithome.com.tw/upload/images/20251008/20178008dAVylKZ6Fx.png
這個輸出表示目前只有一個監獄在運行,然後這個監獄專門用來保護SSH服務,如果有人連續輸入錯誤密碼,他會依照設定去阻擋IP。

如果想看到sshd jail的指令可以使用:

sudo fail2ban-client status sshd

輸出可以看到那些IP被封鎖以及jail的規則
例如我的:
https://ithelp.ithome.com.tw/upload/images/20251008/20178008fq5CpZtAe1.png

注意!這邊是以ssh為例,如果想保護其他服務需要另外啟用

第三項.應用層(Flask/session)

這邊以幾個常見的攻擊方式為例,在寫專案時就可寫入其中

  • 強制session cookie屬性、使用安全token、避免在cookie放敏感資料:
from flask import Flask
app = Flask(__name__)
app.config.update(
    SESSION_COOKIE_SECURE=True,
    SESSION_COOKIE_HTTPONLY=True,
    SESSION_COOKIE_SAMESITE='Lax',
)
  • SQL注入防護(永遠起用參數化查詢):
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
  • 防止CSRF:
from flask_wtf import CSRFProtect
csrf = CSRFProtect(app)

基本自動化檢查

  • 檢查TLS的強度
openssl s_client -connect your.site:443 -servername your.site
  • 檢查cookie屬性
curl-I htts://example.com

今日小結

今天我們學了如何建立基本的防禦環境,除了以上講的,定期檢查日誌也很重要,可以看到是否有異常流量等,明天要來統整我們目前為止學過的基礎通訊內容


上一篇
Day-27 攻擊類型總複習
系列文
Izumi從零開始的30日WEB馬拉松28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言